Smultron syntax colours your document if you have chosen so with the syntax definition of your choice. For every key pressed it colours the line which the character is on and 0.3 seconds later it colours the whole visible page if there hasn't been another key pressed, in which case it is pushed forward another 0.3 seconds. If you've in the Advanced tab in Preferences have chosen to do a complete automatic recolour of the whole document it will do so after the specified time after the last key was pressed.
The colours:
The easiest way to learn which colours to choose in Preferences is to test on document which you know well. But below is an image of a fictional php-code which might help you.

(<?php and everything in grey until the closing tag (not shown here) are Instructions. <head><title> are Commands. echo is a keyword.)
Change a syntax definition:
The syntax definitions are defined in plist files in the Application bundle (ctrl-click on Smultron and choose Show Package Contents -> Contents -> Resources) e.g. html.plist for HTML documents. If you want to change anything or add a keyword you can just change the file and save it. (Remember to treat special characters in the standard xml-way e.g. < instead of < and if you don't want leave a string empty please do it like this <string></string>.)
Examples of the keys follows here (I use php right here):
beginCommand: < to show html commands
endCommand: >
beginInstruction: <? to start a block of code
endInstruction: ?>
beginVariable: $ the character (or any of the characters) that signals that is variable
endVariable: :;(){}=[]+-/.,*!?%&><\ anyone of these characters ends the variable name
firstString: " only one character is recognised for the strings
secondString: '
firstSingleLineComment: // a comment till the end of the line
secondSingleLineComment: # another comment till the end of the line
beginFirstMultiLineComment: /* the start of a multiline comment
endFirstMultiLineComment: */
beginSecondMultiLineComment: <!-- to allow e.g. html comments in php-code
endSecondMultiLineComment: -->
keyWordsCaseSensitive: <false/> set either to </false> or </true> if you want the keywords to be case sensitive
recolourKeyWordIfAlreadyColoured: <false/> if you want a keyword to be coloured as a keyword even if its already been coloured as a command
keyWords: <string>and</string> a list of keywords
Add new definition:
If you want to add a new definition you create a file named languagename.plist a fill with information as per above (it is easiest to copy an a plist file and only change what you need). Then you open SyntaxDefinitions.plist in the Application bundle and add a dictionary before </array></plist> in the file. An example is below:
<dict>
<key>name</key>
<string>PHP</string>
<key>file</key>
<string>php</string>
<key>extensions</key>
<array>
<string>php</string>
<string>php3</string>
<string>phtml</string>
<string>phtm</string>
</array>
</dict>
The name key is what shows up in the View menu and the file key is what you name your file minus the .plist extension. The extensions key lists the various extensions your language can have.